package com.senlingspace.system.domain.vo;

import com.senlingspace.common.enums.OrderSource;
import com.senlingspace.common.enums.LakalaPaymentTypeEnum;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * pos 端 订单列表
 *
 * @author lebronjames
 * @date 2024/07/30
 */
@Data
public class PosOrderVo implements Serializable {
    /**
     * 订单 ID
     */
    private Long orderId;

    /**
     * 订单编号
     */
    private String orderNumber;

    /**
     * 下单时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 订单来源
     *
     * @see OrderSource
     */
    private Integer source;

    /**
     * 实际收款
     */
    private Integer actualAmount;

    /**
     * 支付方式
     *
     * @see LakalaPaymentTypeEnum
     */
    private String paymentType;

    /**
     * 订单状态
     * <p>
     * 未核销（UNREDEEMED）
     * 已核销（REDEEMED）
     * INIT-初始化 CREATE-下单成功
     * SUCCESS-交易成功
     * FAIL-交易失败
     * DEAL-交易处理中
     * UNKNOWN-未知状态
     * CLOSE-订单关闭
     * PART_REFUND-部分退款
     * REFUND-全部退款(或订单被撤销）
     */
    private String status;

    /**
     * 项目图片地址
     */
    private String cover;

    /**
     * 项目名称
     */
    private String projectName;

    /**
     * 收银员
     */
    private String cashier;

    /**
     *门票信息
     */
    private List<Ticket> tickets;

    /**
     * 商品信息
     */
    private List<Product> products;

    /**
     * 操作记录
     */
    private List<OperationRecord> operationRecords;

    @Data
    public static class Product implements Serializable {
        /**
         * 商品名称
         */
        private String name;

        /**
         * 数量
         */
        private Long quantity;

        /**
         * 商品价格
         */
        private Long price;

        /**
         * 商品图片链接
         */
        private String orderURL;
    }

    @Data
    public static class OperationRecord implements Serializable {
        /**
         * 操作账号
         */
        private String operationAccount;

        /**
         * 操作时间
         */
        private Date operationTime;

        /**
         * 内容
         */
        private String content;
    }

    @Data
    public static class Ticket implements Serializable {
        /**
         * 门票名称
         */
        private String name;

        /**
         * 门票数量
         */
        private Long quantity;

        /**
         * 门票价格
         */
        private Long price;
    }
}
